home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf
/
ASo-Tools
/
Sources
/
Lupe.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-03-13
|
3KB
|
114 lines
/* Lupe.c - vergrößert die Pixel unter dem Mousepointer */
#include <dos/dos.h>
#include <intuition/intuitionbase.h>
#include <intuition/intuition.h>
#include <graphics/gfxmacros.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/graphics_protos.h>
#include <clib/intuition_protos.h>
#include <stdlib.h>
extern struct IntuitionBase *IntuitionBase;
#define ACTIVE_SCREEN ((struct Screen *)(IntuitionBase->ActiveScreen))
ULONG GetMessage(struct Window *win, USHORT *code)
{/* MsgPort auslesen; liefert CLASS und ggf. CODE */
struct IntuiMessage *msg;
ULONG class=0;
if(msg=(struct IntuiMessage *)GetMsg(win->UserPort))
{
class=msg->Class;
if(code) *code=msg->Code;
ReplyMsg((struct Message *)msg);
}
else if(code) *code=0;
return(class);
}
#define RP_S (&ACTIVE_SCREEN->RastPort)
#define XPos (ACTIVE_SCREEN->MouseX)
#define YPos (ACTIVE_SCREEN->MouseY)
int _main(void)
{
struct Window *win;
register struct RastPort *RP_W;
ULONG class=0;
short x0,y0,x1,y1,width=11,height=11,plusminus=4,key;
register COUNT i,j;
if(!(win=OpenWindowTags(NULL, WA_GimmeZeroZero,TRUE,
WA_InnerWidth,(2*plusminus+1)*width+1,
WA_InnerHeight,(2*plusminus+1)*height+1,
WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_NEWSIZE| \
IDCMP_MOUSEMOVE|IDCMP_VANILLAKEY,
WA_ReportMouse,TRUE, WA_DragBar,TRUE,
WA_DepthGadget,TRUE, WA_SizeGadget,TRUE,
WA_SizeBBottom,TRUE, WA_CloseGadget,TRUE,
WA_Activate,TRUE, WA_Title,"Gummi-Lupe",
WA_RMBTrap,TRUE, WA_MinWidth,0, WA_MinHeight,0,
WA_MaxWidth,~0, WA_MaxHeight,~0, WA_AutoAdjust,TRUE,
WA_MouseQueue,2, TAG_DONE)))
{
Printf("kann Window nicht öffnen !\n");
return(RETURN_ERROR);
}
RP_W=win->RPort;
SetDrMd(RP_W, JAM1);
SetOPen(RP_W, 3);
while(class!=IDCMP_CLOSEWINDOW)
{
WaitPort(win->UserPort);
class=GetMessage(win,&key);
switch(class)
{
case IDCMP_VANILLAKEY:
switch(key)
{
case 27: goto ende; /* break; */
case 'p': case 'P': case '+':
++plusminus;
goto redim;
/* break; */
case 'm': case 'M': case '-':
if(plusminus>1)
{
--plusminus;
goto redim;
}
/* break; */
}
break;
case IDCMP_NEWSIZE:
redim: width=(win->GZZWidth)/(2*plusminus+1);
height=(win->GZZHeight)/(2*plusminus+1);
if(width<3 || height<3) { --plusminus; goto redim; }
SetRast(RP_W,0);
case MOUSEMOVE:
x0=XPos; y0=YPos;
for(i=-plusminus; i<=plusminus; ++i)
for(j=-plusminus; j<=plusminus; ++j)
{
SetAPen(RP_W, ReadPixel(RP_S, x0+j, y0+i));
x1=(j+plusminus)*width;
y1=(i+plusminus)*height;
RectFill(RP_W, x1,y1,x1+width,y1+height);
}
while((class=GetMessage(win,NULL))==MOUSEMOVE);
break;
}
}
ende:
CloseWindow(win);
return(RETURN_OK);
}
extern void _waitwbmsg(void);
void routing_that_is_never_called(void) { _waitwbmsg(); }